$(function() {
    let layer = layui.layer
    let form = layui.form
    initcate()
    initEditor()

    function initcate() {
        $.ajax({
            method: 'GET',
            url: '/my/article/cates',
            success: function(res) {
                if (res.status !== 0) {
                    return layer.msg('初始化文章分类失败')
                }
                // 调用模板引擎，渲染分类列表
                let htmlStr = template('tpl-cate', res)
                $('[name=cate_id]').html(htmlStr)
                    // 一定要记得掉用 form.render()方法不然看不到
                form.render()

            }
        })
    }

    // 初始化图片的裁剪区
    let $image = $('#image')
        // 裁剪选项
    let options = {
            aspectRatio: 400 / 200,
            preview: '.img-preview'
        }
        // 初始化裁剪区域
    $image.cropper(options)

    // 为选择封面的按钮，绑定点击事件处理函数
    $('#btnChooseImage').on('click', function() {
        $('#coverFile').click()
    })

    // 监听 coverFile 的change 事件，获取用户选择的文件列表
    $('#coverFile').on('change', function(e) {
        // 获取文件的列表数据
        let files = e.target.files
            // 判断用户是否选择了文件
        if (files.length === 0) {
            return
        }
        // 根据文件，创建对应的 URL 地址
        let newImgURL = URL.createObjectURL(files[0])
            // 为裁剪区域重新设置图片
        $image
            .cropper('destroy') // 销毁旧的剪裁区域
            .attr('src', newImgURL) // 重新设置图片路径
            .cropper(options) // 重新初始化裁剪区域
    })

    // 定义文章的发布状态
    let art_state = '已发布'
        // 为村尾草稿按钮绑定点击事件处理函数
    $('#btnSave2').on('click', function() {
        art_state = '草稿'
    })

    // 为表单绑定submit提交事件
    $('#form-pub').on('submit', function(e) {
            // 1.阻止表单的默认提交行为
            e.preventDefault()
                // 2.基于 form 表单，快速建起一个formData 对象
            let fd = new FormData($(this)[0])
                // 3.将文章的发布状态，存到 fd 中
            fd.append('state', art_state)
                // 4.将封面裁剪过后的图片，输出为一个文件对象
            $image
                .cropper('getCroppedCanvas', {
                    width: 400,
                    height: 200
                })
                .toBlob(function(blob) {
                    // 将 Cavas 画布上的内容，转化为文件对象
                    // 得到文件对象后，进行后续的操作
                    // 5.将文件对象，存储到 fd 中
                    fd.append('cover_img', blob)
                        // 发起请求发布文章
                    publishArticle(fd)
                })

        })
        // 定义一个发布文章的方法
    function publishArticle(fd) {
        $.ajax({
            method: 'POST',
            url: '/my/article/add',
            data: fd,
            // 注意：如果向服务器提交的是 formdata 格式的数据，必须添加以下两个配置项
            contentType: false,
            processData: false,
            success: function(res) {
                if (res.status !== 0) {
                    return layer.msg('发布文章失败')
                }
                layer.msg('发布文章成功')
                    // 发布文章后跳转到文章列表页面
                location.href = '/article/art_list.html'
            }
        })
    }
})